home *** CD-ROM | disk | FTP | other *** search
/ Day Cry / Day Cry CD.bin / oh_towns / ein / sources / einlib.lzh / LIBSRC.LZH / EIN_RSM.C < prev    next >
Text File  |  1994-07-18  |  35KB  |  1,340 lines

  1. /*<Header>==============================================================
  2. *
  3. *    RESUME MANAGER / "EIN_RSM.C"
  4. *
  5. *    COPYRIGHT  Nam  1994, All rights reserved.
  6. *
  7. *        [ Ein(tm) project : âèâWâàü[âÇâ}âlü[âWââè╓ÉöîQ ]
  8. *
  9. *-----------------------------------------------------------------------
  10. *    V1.0L01â┐    94.04.12/Nam    âvâìâgâ^âCâv
  11. *    V1.0L01â┴    94.04.15/Nam    debug,EOFæ╬ë₧
  12. *    V1.0L02â┐    94.04.18/Nam    `RSM_WORK'é╔Ädùlò╧ìX
  13. *    V1.0L03â┐    94.04.27/Nam    âvâìâWâFâNâgû╝é≡'EIN(TM)'é╔üiû╜û╝:é▄éQüj
  14. *    V1.0L03â┴    94.06.22/Nam    CDïNô«Ä₧é═inité╔Ä╕ösé╖éΘéµéñò╧ìX
  15. *    V1.0L04â┐    94.07.06/Nam    DLLë╗/è╓Éöû╝é≡'EIN_rsm..'é╔ò╧ìX
  16. *</Header>==============================================================*/
  17. #include    <stdarg.h>
  18. #include    <stdio.h>
  19. #include     <stdlib.h>
  20. #include     <string.h>
  21. #include    <snd.h>
  22. #include    <winb.h>
  23. #include    <te.h>
  24. #include    <fntb.h>
  25. #include    <gui.h>
  26. #include     <time.h>
  27.  
  28. #define    EIN_RSM
  29. #include     "..\eintm.h"
  30.  
  31.  
  32. #define    RSMVER    ("### EIN(TM):  Resume Data File V0.1L04â┐ ###\n\n\n")
  33.  
  34. #define    RSMENV    ("RSM")
  35. #define    RSMNAME    ("RESUME.INI")
  36. #define    RBKNAME    ("RESUME.BAK")
  37.  
  38. #ifndef NOERR
  39. #define    NOERR    (0)
  40. #endif
  41. #ifndef ERROR
  42. #define    ERROR    (1)
  43. #endif
  44.  
  45.  
  46. #define    CHR_EOF    (0x1a)
  47. #define    CHR_EOB    (0x01)    /* ^A */
  48. #define    CHR_CR    (0x0d)
  49. #define    CHR_LF    (0x0a)
  50.  
  51. #ifdef EINLIB
  52.     #define    CBUFSIZE    (4096)
  53.     #define    PBUFSIZE    (512)
  54. #else
  55.     #define    CBUFSIZE    (256)
  56.     #define    PBUFSIZE    (128)
  57. #endif
  58.  
  59. #define    RSMWID    ("RSMMGR 004â┐")
  60. #define    RSMTAGIDLEN    (63)
  61. #define    RSMPATHLEN    (63)
  62.  
  63. /* âÅü[âNâGâèâAÄ»ò╩id */
  64. static char rsmworkstr[16]=RSMWID;
  65. /* ëⁿìsò╢ÄÜüòëⁿâfü[â^ò╢ÄÜ */
  66. static char    str_lf[3]={ CHR_CR, CHR_LF, 0 };
  67. static char    str_eob[4]={ CHR_EOB, CHR_CR, CHR_LF, 0 };
  68. /* ïñùpôⁿÅoù═âoâbâtâ@êµ */
  69. static char    cbuf[CBUFSIZE+2];
  70.  
  71. /* ò╥ÅWæ«É½ì\æóæ╠ */
  72. typedef struct {
  73.     /* âÅü[âNâGâèâAÄ»ò╩ò╢ÄÜù± */
  74.     char        workid[16];                /* âÅü[âNâGâèâAÄ»ò╩ò╢ÄÜù± */
  75.     
  76.     char        *rbuf;                    /* âfü[â^âoâbâtâ@â|âCâôâ^           */
  77.     long int    rbufsize;                /* âfü[â^âoâbâtâ@âTâCâY             */
  78.     
  79.     char        idstr[64];                /* Ä»ò╩â^âOò╢ÄÜù±                   */
  80.     char        bname[64];                /* ô╟é▌Åoé╡âtâ@âCâïû╝               */
  81.     char        fname[64];                /* Åæé½ì₧é▌âtâ@âCâïû╝               */
  82.     FILE        *fp_r;                    /* ô╟é▌Åoé╡ùpâtâ@âCâïâ|âCâôâ^       */
  83.     FILE        *fp_w;                    /* Åæé½ì₧é▌ùpâtâ@âCâïâ|âCâôâ^       */
  84.     
  85.     long int    tagstart;                /* âfü[â^èJÄnê╩Æu                   */
  86.     long int    fstart;                    /* ÄwÆΦâfü[â^èJÄnê╩Æu               */
  87.     long int    osize;                    /* ÄwÆΦâfü[â^é╠âTâCâY(byte)         */
  88.  
  89.     long int    tagSum;                    /* ò█æ╢é╡é╜â^âOæìÉö                 */
  90.     long int    bufRemain;                /* ò█æ╢âoâbâtâ@é╠ÄcéΦ(byte)         */
  91.     char        bufError;                /* ò█æ╢âGâëü[âtâëâO(saveÄ₧é╔Ägùp)   */
  92.     char        lastChar;                /* ì┼îπé╔âRâsü[é╡é╜ò╢ÄÜ             */
  93.     
  94. }    EIN_RSMWORK;                        /* âèâWâàü[âÇâ}âlü[âWâââÅü[âNì\æóæ╠ */
  95.  
  96.  
  97. /*<Func>================================================================
  98. *    int        EIN_rsmInit( EIN_RSMWORK *work, char *idstr )
  99. *
  100. *    üyèT  ùvüz    âèâWâàü[âÇâ}âlü[âWââé╠Åëè·ë╗
  101. *
  102. *    üyï@  ö\üz    
  103. *
  104. *    üyôⁿ  ù═üz
  105. *                *work        :    âÅü[âNâGâèâAé╓é╠â|âCâôâ^
  106. *                *idstr        :    Ä»ò╩idò╢ÄÜù±é╓é╠â|âCâôâ^(ÅIÆ[é═NULL,ëⁿìsû│é╡)
  107. *
  108. *    üyÅo  ù═üz
  109. *
  110. *    üyè╓ÉöÆlüz    == NOERR    É│ÅφÅIù╣
  111. *
  112. *    üyÆì  ê╙üz    
  113. *
  114. *    üyÄQ  Å╞üz    
  115. *
  116. *-----------------------------------------------------------------------
  117. *    V11L10    1994.04.16/Nam
  118. *</Func>==============================================================*/
  119. int        EIN_rsmInit( EIN_RSMWORK *work, char *idstr )
  120. {
  121.     int        bootDrv;
  122.     int        len;
  123.     int        ret = NOERR;
  124.     char    path[64];
  125.  
  126.     /* âÅü[âNâGâèâAÄ»ò╩idÅæé½ì₧é▌ */
  127.     strcpy( work->workid, rsmworkstr);
  128.  
  129.     /* âfü[â^Ä»ò╩idô╟é▌ì₧é▌ */
  130.     strncpy( work->idstr, idstr, RSMTAGIDLEN );
  131.     work->idstr[RSMTAGIDLEN] = '\0';    /* idÆ╖é¬æσé½é╖é¼éΘÅΩìçé╠trap */
  132.  
  133.     /* âÅü[âNÅëè·ë╗ */
  134.     work->rbuf = NULL;            /* âfü[â^âoâbâtâ@â|âCâôâ^     */
  135.     work->rbufsize = 0;            /* âfü[â^âoâbâtâ@âTâCâY       */
  136.     work->fp_r = NULL;            /* ô╟é▌Åoé╡ùpâtâ@âCâïâ|âCâôâ^ */
  137.     work->fp_w = NULL;            /* Åæé½ì₧é▌ùpâtâ@âCâïâ|âCâôâ^ */
  138.     work->tagstart = 0;            /* âfü[â^èJÄnê╩Æu             */
  139.     work->fstart   = 0;            /* ÄwÆΦâfü[â^èJÄnê╩Æu         */
  140.     work->osize    = 0;            /* ÄwÆΦâfü[â^é╠âTâCâY         */
  141.     work->tagSum   = 0;            /* â^âOæìÉö                   */
  142.     work->bufRemain= 0;            /* ò█æ╢âoâbâtâ@é╠ÄcéΦ(byte)   */
  143.     work->bufError = NOERR;        /* âoâbâtâ@ò█æ╢âtâëâO         */
  144.     work->lastChar = 0;            /* ì┼îπé╔âRâsü[é╡é╜ò╢ÄÜ       */
  145.  
  146.     /* âèâWâàü[âÇâtâ@âCâïé╠âpâXû╝é≡ĵô╛ */
  147.     if ( (getenv(RSMENV) == NULL) ){
  148.          /* è┬ï½âpâXé¬æ╢ì▌é╡é╚éóÅΩìçé═ */
  149.         #ifdef EINLIB
  150.             extern unsigned char    FSYS_getBOOT();
  151.             bootDrv = FSYS_getBOOT();
  152.         #else
  153.             bootDrv=3;    /* ÆPô╞âeâXâgé╠ÅΩìçé═CâhâëâCâué╔î┼ÆΦ */
  154.         #endif
  155.         /* ïNô«âhâëâCâué¬Qê╚èOé╚éτâèâWâàü[âÇë┬ö\ */
  156.         if ( bootDrv != 16 ){
  157.             path[0]=(bootDrv+'A');
  158.             path[1]=0;
  159.             strcat(path, ":\\T_FILE\\");
  160.         } else {
  161.             /* ïNô«âhâëâCâué¬Qé╚éτâèâWâàü[âÇé┼é½é╚éó */
  162.             strcpy( work->workid, ""); 
  163.             ret = ERROR;
  164.         }
  165.     } else {
  166.         /*    è┬ï½âpâX(%RESUME%)é¬ùLéΘ*/
  167.         strncpy( path, getenv(RSMENV), (RSMPATHLEN-13) );
  168.         *(path+(RSMPATHLEN-13)) = '\0';    /* idÆ╖é¬æσé½é╖é¼éΘÅΩìçé╠trap */
  169.         len = strlen (path);                /* âpâXû╝é≡ô╛éΘ              */
  170.         if (path[len-1] != '\\'){            /* ÅIÆ[鬠'\' é┼û│éóÅΩìçé═   */
  171.             strcat(path, "\\");                /* '\'é≡Æ╟ë┴                 */
  172.         }
  173.     }
  174.     /* âèâWâàü[âÇâtâ@âCâïé╠ÉΓæ╬âpâXû╝é≡É▌ÆΦ */
  175.     strcpy(work->fname, path);
  176.     strcat(work->fname, RSMNAME);
  177.     /* âèâWâàü[âÇâtâ@âCâïé╠âoâbâNâAâbâvé╠ÉΓæ╬âpâXû╝é≡É▌ÆΦ */
  178.     strcpy(work->bname, path);
  179.     strcat(work->bname, RBKNAME);
  180.     
  181.     #ifdef DEBUG
  182.     printf(" EIN_rsmInit( %x, %s )\n", work, idstr);
  183.     printf("           fname:%s  bname:%s\n", work->fname, work->bname);
  184.     printf("           bootDrv=%d\n", bootDrv);
  185.     #endif
  186.     
  187.     return ret;
  188. }
  189.  
  190. /*======================================================================
  191. *    int        __EIN_rsmChkWork( EIN_RSMWORK *work )
  192. *
  193. *    üyèT  ùvüz    âèâWâàü[âÇâ}âlü[âWâââÅü[âNâGâèâAé╠É│ôûɽâ`âFâbâN
  194. *
  195. *    üyï@  ö\üz    
  196. *
  197. *    üyôⁿ  ù═üz
  198. *                *work        :    âÅü[âNâGâèâAé╓é╠â|âCâôâ^
  199. *
  200. *    üyÅo  ù═üz
  201. *
  202. *    üyè╓ÉöÆlüz    == NOERR    É│ÅφÅIù╣
  203. *                != NOERR    ê┘ÅφÅIù╣
  204. *                                -1:âÅü[âNâGâèâAé╠âAâhâîâXé¬NULL
  205. *                                -2:âÅü[âNâGâèâAé¬ûóÅëè·ë╗
  206. *                                -3:â}âlü[âWââé╠Versioné¬êßéñ
  207. *                                -4:âÅü[âNâGâèâAé╠Åëè·ë╗é╔Ä╕ös
  208. *
  209. *    üyÆì  ê╙üz    
  210. *
  211. *    üyÄQ  Å╞üz    
  212. *
  213. *-----------------------------------------------------------------------
  214. *    V11L10    1994.04.16/Nam
  215. *=====================================================================*/
  216. int        __EIN_rsmChkWork( EIN_RSMWORK *work )
  217. {
  218.     if ( work==NULL ){
  219.         #ifdef DEBUG
  220.         printf("__EIN_rsmChkWork: âÅü[âNâGâèâAé╠âAâhâîâXé¬NULLé┼é╖\n");
  221.         #endif
  222.         return -1;
  223.     }
  224.     if ( work->workid[0]!='R' ){
  225.         #ifdef DEBUG
  226.         printf("__EIN_rsmChkWork: âÅü[âNâGâèâAé≡Åëè·ë╗é╡é─éóé▄é╣é±\n");
  227.         #endif
  228.         return -2;
  229.     }
  230.     if ( strcmp(work->workid,rsmworkstr) != 0){
  231.         #ifdef DEBUG
  232.         printf("__EIN_rsmChkWork: âèâWâàü[âÇâ}âlü[âWââé╠Versioné¬êßéóé▄é╖\n");
  233.         #endif
  234.         return -3;
  235.     }
  236.     if ( work->idstr==NULL || work->fname==NULL || work->bname==NULL ){
  237.         #ifdef DEBUG
  238.         printf("__EIN_rsmChkWork: âÅü[âNâGâèâAé╠Åëè·ë╗é╔Ä╕ösé╡é─éóé▄é╖\n");
  239.         #endif
  240.         return -4;
  241.     }
  242.     return NOERR;
  243. }
  244.  
  245. /*======================================================================
  246. *    int        __EIN_rsmGetBufRemain( EIN_RSMWORK *work )
  247. *
  248. *    üyèT  ùvüz    âèâWâàü[âÇÅεò±âoâbâtâ@ÄcéΦÄZÅo
  249. *
  250. *    üyï@  ö\üz    âèâWâàü[âÇÅεò±âoâbâtâ@é╠ÄcéΦbyteÉöé≡îvÄZé╡é▄é╖
  251. *
  252. *    üyôⁿ  ù═üz    *work        :    âÅü[âNâGâèâAé╓é╠â|âCâôâ^
  253. *
  254. *    üyÅo  ù═üz
  255. *
  256. *    üyè╓ÉöÆlüz    ÄcéΦbyteÉö
  257. *
  258. *    üyÆì  ê╙üz    âoâbâtâ@ÅIÆ[âTâCâYé≡è▄é▀é▄é╖.
  259. *                âÅü[âNâGâèâAé╠â`âFâbâNé═é╡é╚éóé╠é┼Æìê╙é╡é─ë║é│éó.
  260. *
  261. *    üyÄQ  Å╞üz    
  262. *
  263. *-----------------------------------------------------------------------
  264. *    V11L10    1994.06.24/Nam
  265. *=====================================================================*/
  266. int        __EIN_rsmGetBufRemain( EIN_RSMWORK *work )
  267. {
  268.     work->bufRemain = work->rbufsize - 
  269.                     (strlen(work->rbuf)+strlen(str_lf)+strlen(str_eob)+1);
  270.     return work->bufRemain;
  271. }
  272.  
  273. /*<Func>================================================================
  274. *    int        EIN_rsmBufHead( EIN_RSMWORK *work )
  275. *
  276. *    üyèT  ùvüz    âèâWâàü[âÇÅεò±âoâbâtâ@IDÉ▌ÆΦ
  277. *
  278. *    üyï@  ö\üz    âèâWâàü[âÇÅεò±âoâbâtâ@ɵô¬é╔IDò╢ÄÜù±é≡É▌ÆΦé╡é▄é╖
  279. *
  280. *    üyôⁿ  ù═üz    *work        :    âÅü[âNâGâèâAé╓é╠â|âCâôâ^